From 7ab7ffa542be7a6dcda1a35d151ace5e22a8d721 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Mon, 14 Sep 2009 16:07:43 +0200 Subject: [PATCH] Automatically flush window when doing non-double-buffered expose Applications using non-double-buffered drawing using cairo (e.g. Abiword) can draw directly to the window using cairo and thus manage to avoid the automatic flushing of outstanding moves. This can cause redraw inconsistencies like bug 593507. We fix this by always flushing when exposing non-double-buffered widgets. --- docs/reference/gdk/gdk-sections.txt | 1 + gtk/gtkmain.c | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/reference/gdk/gdk-sections.txt b/docs/reference/gdk/gdk-sections.txt index 5bdc717068..43d000c709 100644 --- a/docs/reference/gdk/gdk-sections.txt +++ b/docs/reference/gdk/gdk-sections.txt @@ -662,6 +662,7 @@ gdk_window_resize gdk_window_move_resize gdk_window_scroll gdk_window_move_region +gdk_window_flush gdk_window_ensure_native gdk_window_reparent gdk_window_clear diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c index 11aee08fbc..e47e1beab3 100644 --- a/gtk/gtkmain.c +++ b/gtk/gtkmain.c @@ -1559,7 +1559,15 @@ gtk_main_do_event (GdkEvent *event) gdk_window_end_paint (event->any.window); } else - gtk_widget_send_expose (event_widget, event); + { + /* The app may paint with a previously allocated cairo_t, + which will draw directly to the window. We can't catch cairo + drap operatoins to automatically flush the window, thus we + need to explicitly flush any outstanding moves or double + buffering */ + gdk_window_flush (event->any.window); + gtk_widget_send_expose (event_widget, event); + } break; case GDK_PROPERTY_NOTIFY: -- 2.30.2